<?php namespace app\Classes\BuilderTest;

abstract class carModel{

    //这里存储所有组装车需要的零件
    public $spareParts = array();

    //车的名字
    public $carName = "";

    //增加轮子部件
    public abstract function addLunzi($xinghao);

    //增加外壳部件
    public abstract function addWaike($xinghao);

    //增加发动机部件
    public abstract function addFadongji($xinghao);

    //获取车，并给车取名字
    final public function getCar($carName){
        if($this->spareParts){
            $this->carName = $carName;
            //$k 代表部件名字
            //$v 代表型号
            foreach($this->spareParts as $k=>$v){
                $actionName = "add" . $k;
                $this->$actionName($v);
            }
        }else{
            throw new \Exception("没有汽车部件");

        }
    }
}








////模拟客户端调用
//
////创建一辆宝马车，取名字为宝马x1
//
//$bmwBuilder = new bmwBuilder();
//$bmwBuilder->setSpareParts('Lunzi' , '牛逼轮子1号');
//$bmwBuilder->setSpareParts('Waike' , '牛逼外壳1号');
//$bmwBuilder->setSpareParts('Fadongji' , '牛逼发动机1号');
//$bmwBuilder->getCarModel("宝马x1");
//$bmwBuilder->getCarModel("宝马x1");  //连续创建两个宝马x1
//
////再创建一个宝马 没有外壳 取名为 宝马s5
//$bmwBuilder = new bmwBuilder();
//$bmwBuilder->setSpareParts('Lunzi' , '牛逼轮子2号');
//$bmwBuilder->setSpareParts('Fadongji' , '牛逼发动机2号');
//$bmwBuilder->getCarModel("宝马s5");
//$bmwBuilder->getCarModel("宝马s5");  //连续创建两个宝马x1